import torch


# 基本元素操作函数
def basic_operations():
    # 初始化一个空张量
    # x = torch.empty(5, 3)

    # 初始化一个初始化张量
    # x = torch.rand(5, 3)

    # 创建一个全零张量，并可指定数据类型为64位浮点数
    # x = torch.zeros(5, 3, dtype=torch.long)

    # 直接通过数据创建张量
    x = torch.tensor([5.5, 3])

    # 通过一个已有的张量创建相同尺寸的张量
    x = x.new_ones(5, 3, dtype=torch.double)
    x = torch.rand_like(x, dtype=torch.float)

    # print(x)
    # 在实际使用中，两者功能完全相同，可以互换使用。
    # x.shape 更符合 Python 的风格且更简洁，而 x.size() 保持了与早期 PyTorch 版本的兼容性。
    # print(type(x.size()))
    # torch.Size函数返回一个元组，表示张量的维度大小。，因此支持一切元组的操作
    a, b = x.size()
    print(a, b)
    # print(x.shape)


# 基本运算操作: 张量加法
def basic_operations_plus():
    x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    y = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # print(f"第一种加法：{x + y}")
    # print(f"第二种加法：{torch.add(x, y)}")
    # a, b = x.size()
    # result = torch.empty(a, b)
    # torch.add(x, y, out=result)
    # print(f"第三种加法：{result}")
    # y.add_(x)
    # print(f"第四种加法：{y}")

    """
    x[:, :1] 的含义：
        : 表示选择所有行（即保留第 0 维的所有数据）。
        :1 表示选择第 0 列（即第 1 维的第 0 个元素，但不包括第 1 个元素，相当于 0:1）
    """
    print(x[:, :1])
    """
    . x[:, 1]（降维成一维）
        : 表示所有行。
        1 表示直接取第 1 列（索引为 1）。
    """
    print(x[:, 1])


if __name__ == '__main__':
    # basic_operations()
    basic_operations_plus()
